package cn.myframe;

/*******************
 *@Describe 普通消息队列发送
 *@author 封神梦
 *@Time 2022/8/2
 *@Company
 ****************/


import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.scheduling.annotation.Scheduled;

import javax.jms.*;


public class  ActiveMQSender {

    private static final int SEND_NUMBER = 5;
    public static void main(String[] args) throws JMSException {

        //创建连接工厂，这个参数就是自己的activeMQ的地址
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");

        //2.创建连接
        Connection connection = connectionFactory.createConnection();

        //3.启动连接
        connection.start();

        //4.获取session(会话对象)
    /*
    arg0 是否启用事务
    arg1 消息的确认方式 自动确认
     */
        Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

        //5.创建一个队列对象,名称
        Queue firstQueue = session.createQueue("firstQueue");

        //6.创建一个消息的生产者对象
//    Destination destination = ;//目标对象
        MessageProducer producer = session.createProducer(firstQueue);
        producer.setDeliveryMode(DeliveryMode.PERSISTENT);
        //7.创建一个消息
        for(int i = 1 ;i<9;i++) {
            TextMessage textMessage = session.createTextMessage("欢迎来到封神梦空间====》"+i);

            //8.发送消息
            producer.send(textMessage);
        }
        //9.关闭资源
        producer.close();
        session.close();
        connection.close();

    }
    //属性注入
    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;

    @Autowired
    private Queue queue;


    //发送消息
    public void sendMsg(){
        jmsMessagingTemplate.convertAndSend(queue,"QueueProducer发送消息到队列");
    }

    //定时发送消息：每隔3秒发送一条消息    微服务项目启动的时候自动执行@Scheduled修饰的方法
    @Scheduled(fixedDelay = 3000l)
    public void sendMsgScheduled(){
        //生成TextMessage对象
        jmsMessagingTemplate.convertAndSend(queue,"QueueProducer发送定时消息到队列");
        System.out.println("定时消息发送完成");
    }
}
